package com.example.event_resource_java.commons.enums;

/**
 * api全局异常码
 * <p>
 * 错误码暂定都是5位数字，并配有相应的英文解释
 * 错误码为 0 表示成功，其他都表示错误
 * 错误码按模块按功能场景分级分段，前三位错误码表示模块，第四位表示模块下的功能。举例，商城系统里有交易模块和商品模块，
 * 则可以这样划分：401开头的表示交易模块，402开头的表示商品模块，4011开头的表示交易模块里的下单场景需要用到的错误码，
 * 4021表示商品模块下的添加商品场景里需要用到的错误码。如果某个场景功能下需要的比较多的错误码，则可以使用其他未被使用的码段，
 * 即该场景功能可以拥有多个码段，然后通过添加注释等方式让人理解即可。
 * <p>
 * 数字 1 开头的错误码表示系统级别的错误，比如缺少某种字符集，连不上数据库之类的，系统级的错误码不需要分模块，可以按照自增方式进行添加
 * 数字 4 开头的错误码表示API参数校验失败，比如 “交易模块下单场景中，订单金额参数不能为空” 可以用 40111 错误码来表示
 * 数字 5 开头的错误码表示后台业务校验失败，比如 “交易模块下单场景中，该用户没有下单权限” 可以用 50111 错误码来表示
 * 数字 4 开头的错误码与数字 5 开头的错误码对应的模块分类需要保持一致，即 4011 表示交易模块下单场景的API错误，5011 表示交易模块下单场景的业务错误
 * 错误码按需分配，逐步增加，灵活扩展
 */

public enum ApiEnumError {
    unKnowFail(-1, "未知错误"),
    success(0, "请求成功"),

    //数字 1 开头表示系统级别的错误，系统级的错误码不需要分模块，可以按照自增方式进行添加
    notAuthorization(10000, "未授权"),
    serverRefuse(10001, "服务器拒绝请求"),
    pageNotFound(10002, "页面不存在"),
    requestTimeout(10003, "请求超时"),
    requestBodyTooLarge(10004, "请求体过大"),
    requestBodyTypeNotSupported(10005, "请求体的类型不支持"),
    getConfFail(10006, "获取配置数据异常"),
    wxThrowFail(10007, "微信抛出的异常"),
    FileUploadGetBytesError(10008, "文件上传错误"),
    FileUploadError(10009, "文件上传错误"),
    MultipartException(10010, "文件上传异常"),
    apiAuthorizationLoginFailed(10011, "用户名或密码错误"),
    apiAuthorizationSignFailed(10012, "token生成失败"),
    apiAuthorizationInvalid(10013, "token不合法"),
    apiAuthorizationLoggedout(10014, "token已注销"),
    apiAuthorizationExpired(10015, "token已过期"),
    apiAuthorizationFailed(10016, "token认证失败"),
    apiAuthorizationWxLoginFailed(10017, "登录失败"),
    NOOPENID(10018, "微信信息缺失，请授权获取"),

    //数字 4 开头的错误码表示API参数校验失败
    lackParameter(40011, "缺少参数"),
    formatFail(40012, " 格式错误"),
    EnrolmentError(40013,"已申请"),
    APPLY_ED(40014 , "此站点类型已存在，请勿重复申请，请在个人中心查询申请记录或检查机构代码是否填写正确"),
    coursesErr(40015, "课程信息错误，请重试"),
    orgsErr(40015, "机构信息错误，请重试"),
    NoorgsErr(400151, "机构信息不存在，请先申请机构！"),
    orgsIncompleteInfo(40015,"机构信息不全，请重试"),
    EDITERR(40016, "编辑保存错误"),
    PASSWORDFAIL(40017, "请输入旧密码"),
    PASSWORDERROR(40018, "旧密码错误"),
    NoInfrom(40019, "信息查询错误，请重试"),
    RegistrationIsClosed(40020, "报名已截止，无法更改"),
    SUMBITERR(40021, "提交错误"),
    NOPAYCOURSE(40022, "您未购买此课程，请购买后重试！"),
    ALREADYPAYCOURSE(40023, "您已提交过此课程，请前往个人中心—我的订单支付或上课！"),
    TopSAVEERR(40024, "记录保存错误，请重试！"),
    FocusOnSAVEERR(40025, "记录保存错误，请重试！"),
    ORDERSAVEERR(40026, "订单生成错误，请重试"),
    INVOICE_ORDER_NOT_NULL(40037, "用友回调随机码没有找到对应发票记录"),


    //数字 5 开头的错误码表示后台业务校验失败
    beforeReg(50011, "请先注册"),
    mobileAlreadyReg(50012, "该手机号码已经注册"),
    notRepeatReg(50013, "您已经注册过了，请勿重复注册"),
    apiSmsSendFailed(50014, "短信发送失败"),
    apiSmsCodeInvalid(50015, "短信验证码错误"),
    apiSmsSendFailedS(50016, "短信发送超过限制次数"),
    apiSmsSendFailedSQ(50018, "短信发送频繁/发送失败，请休息一下再来"),
    passFail(50016, "密码错误"),
    USERNAMEEXISTED(50017, "用户名已存在"),
    dateParseException(50018, "时间格式转换异常"),
    balanceInsufficient(50019, "可用余额不足"),
    areaNotFound(50021, "未找到该地域"),
    NOTBATCHSTU(50020, "该认证批次没有考生获得证书"),
    NOCer(50021, "该专家类型培训期数没有证书信息"),
    parameterParseError(50023, "参数转换异常"),
    dateGetError(50024, "数据获取异常"),
    orderPriceError(50025, "错误！订单金额为零"),
    MOBILE_NOT_NULL(50027, "手机号不能为空"),
    ORDER_NOT_NULL(50028, "订单号不能为空"),
    wxPayError(50030, "微信下单失败"),
    CLIENTUSER_NAME_OR_MOBILE_NOT_NULL(50047, "请先完善个人信息"),
    WECHAT_REFUND_COME_TO_NOTHING(50049, "微信退款失败"),
    INVOICEINFO_INEXISTENCE(50054, "发票抬头不存在"),
    USER_NULL(50055, "用户为空"),
    NOUSERERROR(50056, "该手机号码没有注册过，请先注册！"),
    USER_NOT_MOBILE(60010,"用户没有绑定手机号码"),
    USERNAME_OR_PASSWORD(60011,"用户名或密码错误"),
    WEBRGE_OR_CODE(60011,"请先注册或验证码登录"),
    NORESUMES(60012,"您暂无简历信息，请先完善"),
    STATION_POINT_INSERT(60013,"您已申请过该站点，请勿重复申请！可前往个人中心查看或编辑该站点信息！");





    private int code;
    private String msg;

    public int getCode() {
        return code;
    }

    public String getCodeStr() {
        return code + "";
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    ApiEnumError(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public static String getMsgByCode(int code) {
        ApiEnumError[] values = ApiEnumError.values();
        for (ApiEnumError ec : values) {
            if (ec.code == code) {
                return ec.msg;
            }
        }
        return "";
    }

    public static int getCodeByMsg(String msg) {
        ApiEnumError[] values = ApiEnumError.values();
        for (ApiEnumError ec : values) {
            if (ec.msg.equals(msg)) {
                return ec.code;
            }
        }
        return -1;
    }

}
